package com.cy.java.basic;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 *  VM Arguments 是设置的虚拟机的属性。
 *这类在运行时会被读到内存，除了此内存还有哪些内存读到内存，第一个读到内存的类是谁
 * 通过配置JVM参数实现：  -XX:+TraceClassLoading
 */
public class HelloWord { //HelloWord.class
    /*
     * 请问main方法中的参数用途是干什么？我们可以给他传值吗？假如是idea在哪里进行传值？
     * 程序在运行过程我想了解GC情况 有没有触发GC 加入触发了GC 对哪些内存区域进行了回收
     * 在Edit里面的program arguments 中的值作为 args[] 的参数传入。
     *   -XX:+PrintGCDetails
     *
     */
    public static void main(String[] args) {
        System.out.println(Arrays.toString(args));
        System.out.println("111");
        System.out.println("222");
        System.out.println("helloword! hhhh");
       // System.out.println(args[0]); //接收参数
       // System.out.println(args[1]);
       // System.out.println(args[2]);

        //触发GC的手段
        //1)手动GC
        //System.gc();
        //2)自动GC
        // List<byte[]> list = new ArrayList<>();  //2.1 这行代码触发的小GC和大GC 出现了内存溢出的异常
        for (int i=0;i<10000;i++){
            //list.add(new byte[1024*1024]);  //2.1
            /**
             * Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
             * 	at com.cy.java.basic.HelloWord.main(HelloWord.java:25)
             */
            byte[] array = new byte[1024*1024]; //2.2 这行代码只发生了小gc 没有出现内存溢出的问题
            //内存中的对象何时会被认为垃圾对象》对象不可达时（jvm访问不到）
        }
        //思考：系统在启动gc时，要回收内存中的垃圾对象，此时还可能会导致短时间的程序暂停

    }
}
